home *** CD-ROM | disk | FTP | other *** search
/ Hardcore Visual Basic 5.0 (2nd Edition) / Hardcore Visual Basic 5.0 - Second Edition (1997)(Microsoft Press).iso / Code / GDITool.bas < prev    next >
BASIC Source File  |  1997-06-14  |  2KB  |  74 lines

  1. Attribute VB_Name = "MGDITool"
  2. Option Explicit
  3.  
  4. Public Enum EErrorGDITool
  5.     eeBaseGDITool = 13510   ' GDITool
  6. End Enum
  7.  
  8. Function VBPolygon(ByVal hDC As Long, aPoint() As Long) As Boolean
  9.     Dim apt() As POINTL, i As Long, iMin As Long, c As Long
  10.     iMin = LBound(aPoint)
  11.     c = UBound(aPoint) - iMin + 1
  12.     BugAssert 0 = (c Mod 2)     ' Even number of elements
  13.     c = c / 2
  14.     ' Create array of pixel-adjusted points
  15.     ReDim apt(0 To c - 1) As POINTL
  16.     Do While i < c
  17.         apt(i).x = aPoint(iMin) / Screen.TwipsPerPixelX
  18.         iMin = iMin + 1
  19.         apt(i).y = aPoint(iMin) / Screen.TwipsPerPixelY
  20.         iMin = iMin + 1
  21.         i = i + 1
  22.     Loop
  23.     ' Pass first element and count to Polygon
  24.     VBPolygon = Polygon(hDC, apt(0), c)
  25. End Function
  26.  
  27. Function VBFloodFill(ByVal hDC As Long, ByVal x As Long, _
  28.                      ByVal y As Long, ByVal clr As Long) As Boolean
  29.     VBFloodFill = FloodFill(hDC, x / Screen.TwipsPerPixelX, _
  30.                                  y / Screen.TwipsPerPixelY, clr)
  31. End Function
  32.  
  33. ' Create combined ROP for MaskBlt
  34. Function MakeRop4(ropFore As Long, ropBack As Long) As Long
  35.     ' MakeRop4 = ((ropBack SHL 8) And &HFF000000) Or ropFore
  36. #If 1 Then
  37.     MakeRop4 = (MBytes.LShiftDWord(ropBack, 8) And &HFF000000) Or ropFore
  38. #Else
  39.     ' Hack to do same shift in Basic
  40.     If ropBack And &H800000 Then
  41.         Dim ropTmp As Long
  42.         ' Remove high bit
  43.         ropTmp = (ropBack And &HFF7FFFFF)
  44.         ' Do calculation
  45.         ropTmp = ((ropTmp * 256) And &HFF000000) Or ropFore
  46.         ' Put high bit back in
  47.         MakeRop4 = ropTmp Or &H80000000
  48.     Else
  49.         MakeRop4 = ((ropBack * 256) And &HFF000000) Or ropFore
  50.     End If
  51. #End If
  52. End Function
  53.  
  54. #If fComponent = 0 Then
  55. Private Sub ErrRaise(e As Long)
  56.     Dim sText As String, sSource As String
  57.     If e > 1000 Then
  58.         sSource = App.ExeName & ".GDITool"
  59.         Select Case e
  60.         Case eeBaseGDITool
  61.             BugAssert True
  62.        ' Case ee...
  63.        '     Add additional errors
  64.         End Select
  65.         Err.Raise COMError(e), sSource, sText
  66.     Else
  67.         ' Raise standard Visual Basic error
  68.         sSource = App.ExeName & ".VBError"
  69.         Err.Raise e, sSource
  70.     End If
  71. End Sub
  72. #End If
  73.  
  74.